package com.blog;

/**
 * 局部变量: 为什么局部变量需要显式设置初始化值
 * https://droidyue.com/blog/2018/07/16/variable-localname-might-not-have-been-initialized/
 * javac (编译器) 可以判断局部变量并默认初始化
 * 局部变量和成员变量的关于赋值和取值的顺序的差异:
 *  1.对于成员变量而言，其赋值和取值访问的先后顺序具有不确定性; 所以编译器交给了JVM 来处理
 *  2.而对于局部变量而言，其赋值和取值访问顺序是确定的; 所以javac处理
 * @author xiaoming
 * @date 2018/10/21
 */
public class LocalVariable {
    // 成员变量不初始化
    public String name;

    public void dumpField (){
        System.out.println("dumpField" + name);
    }

    public void dump() {
        // 局部变量不初始化
        String localName;
        // 错误: Variable 'localName' might not have been initialized
        //System.out.println(localName);
    }

    public static void main(String[] args) {
        LocalVariable localVariable = new LocalVariable();
        // null
        System.out.println(localVariable.name);
    }

}
